const Joi = require('joi');
const bcrypt = require('bcrypt')
//引入数据库中的User构造函数
const { User,validateUser} = require('../../model/user');
const { json } = require('body-parser');


module.exports = async (req, res,next) => {
    // 实施验证
    try {
        await validateUser(req.body);
    } catch (err) {
        // 验证不通过，重定向至用户添加页面
        // 并将错误信息传递到地址栏中
        // return res.redirect(`/admin/user-edit?message=${err.message}`);
        // Json.stringify()将对象数据类型转换为字符串数据类型
        const errMessage=JSON.stringify({path:'/admin/user-edit',message:err.message});
        return  next(errMessage);
    }
    // 根据邮箱查询用户是否存在 如果存在会返回值为用户对象,不存在返回值为空
    let user = await User.findOne({ email: req.body.email });
    // 如果用户已经存在，邮箱地址已经被占用
    if (user) {
        // return res.redirect(`/admin/user-edit?message=邮箱地址已经被占用`)
        return next(JSON.stringify({path:'/admin/user-edit',message:'邮箱地址已经被占用'}));
    }
    // 对密码进行加密处理
    // 先生成随机字符串
    const salt = await bcrypt.genSalt(10);
    // 加密
    const password = await bcrypt.hash(req.body.password, salt);

    // 用加密后的密码替换req.body中的密码
    req.body.password = password;

    // 将数据添加到数据库中
    await User.create(req.body);

    // 重定向回用户列表页面
    res.redirect('/admin/user')
}

















